/**
 * 热敏打印机打印模块
 * 
 * 作者:Vinlic
 */

//监听回调函数对象
let actionListeners = {
    //蓝牙打开事件
    bluetoothOpen: null,
    //蓝牙关闭事件
    bluetoothClose: null,
    //蓝牙开始搜索事件
    bluetoothStartScan: null,
    //蓝牙停止搜索事件
    bluetoothStopScan: null,
    //寻找到打印机设备事件
    printerFound: null,
    //打印机设备连接成功事件
    printerConnected: null,
    //打印机设备断开连接事件
    printerDisconnected: null
};
let bluetoothOpened = false;
let bluetoothScaning = false;
let bluetoothConnecting = false;

/**
 * 监听蓝牙适配器状态改变
 */

wx.onBluetoothAdapterStateChange(function (result) {
    let {available, discovering} = result;
    //设置蓝牙开关状态和蓝牙搜索状态
    bluetoothOpened = available;
    bluetoothScaning = discovering;
    //判断蓝牙是否开启
    if (bluetoothOpened) {
        //蓝牙适配器已打开
        console.info('蓝牙适配器被开启');
        actionListeners.bluetoothOpen();
    }
    else {
        //蓝牙适配器被关闭
        console.error('蓝牙适配器被关闭');
        actionListeners.bluetoothClose();
    }
    //判断蓝牙是否正在搜索
    if (discovering) {
        //蓝牙适配器正在搜索
        console.info('正在搜索打印机...');
        actionListeners.bluetoothStartScan();
    }
    else {
        //蓝牙适配器停止搜索
        console.info('已停止搜索打印机');
        actionListeners.bluetoothStopScan();
    }
});

/**
 * 监听蓝牙是否找到蓝牙设备
 */

wx.onBluetoothDeviceFound(function (result) {
    wx.getBluetoothDevices({
        success: function (result) {
            //已找到蓝牙设备
            let {devices} = result;
            console.info('已找到' + devices.length + '台蓝牙设备');
            console.log(devices);
            //已找到设备停止搜索
            wx.stopBluetoothDevicesDiscovery({
                success: function (result) {
                    console.info('已停止搜索打印机');
                }
            });
            actionListeners.printerFound(devices);
        }
    });
});

/**
 * 监听蓝牙与打印机的连接状态改变
 */

wx.onBLEConnectionStateChange(function(result){
    let {deviceId, connected} = result;
    bluetoothConnecting = connected;
    if (bluetoothConnecting) {
        console.info('打印机设备(' + deviceId + ')已连接');
        actionListeners.printerConnected(deviceId);
    }
    else {
        console.info('打印机设备(' + deviceId + ')断开连接');
        actionListeners.printerDisconnected(deviceId);
    }
});

/**
 * 模块初始化函数
 */

function init(params) {
    actionListeners = params;
}

/**
 * 开启蓝牙适配器函数
 */

function open(params) {
    if (unSupport()) {
        console.error('当前微信版本不支持蓝牙API');
        //不支持蓝牙API
        params.unSupport();
        return;
    }
    console.info('打开蓝牙适配器...');
    //调用开启蓝牙函数
    wx.openBluetoothAdapter({
        success: function (result) {
            console.info('蓝牙适配器已打开');
            if (bluetoothScaning) {
                wx.stopBluetoothDevicesDiscovery({
                    success: function(result) {
                        console.info('已停止搜索打印机');
                    },
                    fail: function() {
                        console.error('无法停止搜索打印机');
                        params.stopFindFail();
                    }
                });
            }
            //开始搜索打印机设备
            wx.startBluetoothDevicesDiscovery({
                success: function (result) {
                    console.info('搜索打印机设备...');
                    //蓝牙打开成功
                    params.openSuccess();
                },
                fail: function () {
                    console.error('无法搜索打印机设备');
                    //无法搜索打印机设备
                    params.startFindFail();
                }
            });
        },
        fail: function (err) {
            console.error('本机蓝牙适配器未启动，请手动启动');
            //本机未开启蓝牙
            params.notOpenBluetooth();
            return;
        }
    });
}

/**
 * 打印机连接函数
 */

function connect(params) {
    let {deviceId} = params;
    console.info('正在连接到打印机(' + deviceId + ')');
    wx.createBLEConnection({
        deviceId: deviceId,
        success: function(result) {
            console.info('打印机(' + deviceId + ')连接成功');
            console.log(result);
            params.connectSuccess(deviceId);
        },
        fail: function() {
            console.error('连接到打印机失败');
            //连接到打印机失败
            params.connectFail();
        }
    });
}

/**
 * 打印机关闭连接函数
 */

function close() {
    
}

/**
 * 向打印机发送消息函数
 */

function send() {

}

/**
 * 检查当前基础库版本是否支持蓝牙API
 */

function unSupport() {
    if (wx.openBluetoothAdapter) {
        return false;
    }
    return true;
}

module.exports = {
    init: init,
    open: open,
    connect: connect,
    close: close,
    send: send
}